

// 这个文件是关于api请求抽离的js文件, 定义多个函数, 对应也给页面调用函数即可
// 封装请求的时候建议 req+请求方式+功能名
// axios 可以配置基地址(不要每次都写重复的基础路径), 只要设置了这句话, 发送请求的时候会默认拼接上基地址
// 全局修改axios配置
axios.defaults.baseURL = 'http://api-breakingnews-web.itheima.net'
// 不管是请求拦截器还是响应拦截器,有两个函数, 函数一是正确响应执行的函数,函数2错误响应执行的函数
// 添加请求拦截器
axios.interceptors.request.use(function (config) {
	// 在发送请求之前做些什么
	// 请求拦截器中的config是当前所发出的请求的信息对象, 在这个config对象中有headers可以自定义请求头
	// console.log('经过了请求拦截器', config);
	// my开头才需要加  /api开头不需要加 --- todo-------------
	config.headers.Authorization = localStorage.getItem('big-event-token')
	return config;
}, function (error) {
	// 对请求错误做些什么
	return Promise.reject(error);
});
// 添加响应拦截器
axios.interceptors.response.use(function (response) {
	// 对响应数据做点什么 响应拦截器中response就是当前这次请求响应的结果,response中的data就是要的message和status所在的对象
	console.log('响应拦截器执行了', response)
	const {data: {message, status}} = response
	if (status === 0) {
		layer.msg(message)
	}
	// 处理token过期 
	// 如果因为别的情况导致响应状态码也是1,也会强制登录, 这个项目接口设计的问题, 以后项目中|开发中 关于token过期有一个单独的状态码 4开头  401 403
	if(status === 1) {
		layer.msg(message)
		// 为了代码的严谨性 最好将过期的本地存储的token清除
		localStorage.removeItem('big-event-token')
		location.href = '/zj的登入页面.html'
	}
	return response  // 将响应的数据交给客户端
}, function (error) {
	// 对响应错误做点什么
	return Promise.reject(error)
})
// 封装注册的api接口
const reqPostRegister = (obj) => {
 return	axios({
		method: 'post',
		url: `/api/reguser`,
		// post请求携带参数使用data get请求携带参数params
		data: handleDataFormat(obj) // 直接调用工具函数处理数据得到处理数据的结果
	})
}
// 封装登录的接口
const reqPostLogin = (obj) => {
 return	axios({
		method: 'post',
		url: `/api/login`,
		// post请求携带参数使用data get请求携带参数params
		data: handleDataFormat(obj)
	})
}
// 封装获取个人信息的接口
const reqGetUserInfo = () => {
	return axios({
		method: 'get',
		url: '/my/userinfo'
		// axios中headers节点允许自定义配置请求头信息
		// headers: {
		// 	// Authorization 后台接口中要求的字段 值是本地存储的token值
		// 	Authorization: localStorage.getItem('big-event-token'),
		// 	a:10,
		// 	b:20
		// }
	})
}

// 封装更新用户信息接口
const reqPostUpdateUserInfo = (obj) => {
	return axios({
		method: 'post',
		url: '/my/userinfo',
		data: handleDataFormat(obj)
	})
}


// 重置密码的接口
const reqPostRePwd = (obj) => {
	return axios({
		method: 'post',
		url: '/my/updatepwd',
		data: handleDataFormat(obj)
	})
}

// 封装通用的函数 
// 1. 主要业务逻辑封装
// 2. 处理的数据 考虑到参数的问题
// 3. 处理的数据别人要用必须加返回值
